home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / text / edit / vim60rt.lha / Vim / vim60 / syntax / cweb.vim < prev    next >
Encoding:
Text File  |  2001-04-30  |  3.2 KB  |  81 lines

  1. " Vim syntax file
  2. " Language:    CWEB
  3. " Maintainer:    Andreas Scherer <andreas.scherer@pobox.com>
  4. " Last Change:    April 30, 2001
  5.  
  6. " Details of the CWEB language can be found in the article by Donald E. Knuth
  7. " and Silvio Levy, "The CWEB System of Structured Documentation", included as
  8. " file "cwebman.tex" in the standard CWEB distribution, available for
  9. " anonymous ftp at ftp://labrea.stanford.edu/pub/cweb/.
  10.  
  11. " TODO: Section names and C/C++ comments should be treated as TeX material.
  12. " TODO: The current version switches syntax highlighting off for section
  13. " TODO: names, and leaves C/C++ comments as such. (On the other hand,
  14. " TODO: switching to TeX mode in C/C++ comments might be colour overkill.)
  15.  
  16. " For version 5.x: Clear all syntax items
  17. " For version 6.x: Quit when a syntax file was already loaded
  18. if version < 600
  19.   syntax clear
  20. elseif exists("b:current_syntax")
  21.   finish
  22. endif
  23.  
  24. " For starters, read the TeX syntax; TeX syntax items are allowed at the top
  25. " level in the CWEB syntax, e.g., in the preamble.  In general, a CWEB source
  26. " code can be seen as a normal TeX document with some C/C++ material
  27. " interspersed in certain defined regions.
  28. if version < 600
  29.   source <sfile>:p:h/tex.vim
  30. else
  31.   runtime! syntax/tex.vim
  32.   unlet b:current_syntax
  33. endif
  34.  
  35. " Read the C/C++ syntax too; C/C++ syntax items are treated as such in the
  36. " C/C++ section of a CWEB chunk or in inner C/C++ context in "|...|" groups.
  37. syntax include @webIncludedC <sfile>:p:h/cpp.vim
  38.  
  39. " Inner C/C++ context (ICC) should be quite simple as it's comprised of
  40. " material in "|...|"; however the naive definition for this region would
  41. " hickup at the innocious "\|" TeX macro.  Note: For the time being we expect
  42. " that an ICC begins either at the start of a line or after some white space.
  43. syntax region webInnerCcontext start="\(^\|[ \t\~`(]\)|" end="|" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff
  44.  
  45. " Genuine C/C++ material.  This syntactic region covers both the definition
  46. " part and the C/C++ part of a CWEB section; it is ended by the TeX part of
  47. " the next section.
  48. syntax region webCpart start="@[dfscp<(]" end="@[ \*]" contains=@webIncludedC,webSectionName,webRestrictedTeX,webIgnoredStuff
  49.  
  50. " Section names contain C/C++ material only in inner context.
  51. syntax region webSectionName start="@[<(]" end="@>" contains=webInnerCcontext contained
  52.  
  53. " The contents of "control texts" is not treated as TeX material, because in
  54. " non-trivial cases this completely clobbers the syntax recognition.  Instead,
  55. " we highlight these elements as "strings".
  56. syntax region webRestrictedTeX start="@[\^\.:t=q]" end="@>" oneline
  57.  
  58. " Double-@ means single-@, anywhere in the CWEB source.  (This allows e-mail
  59. " address <someone@@fsf.org> without going into C/C++ mode.)
  60. syntax match webIgnoredStuff "@@"
  61.  
  62. " Define the default highlighting.
  63. " For version 5.7 and earlier: only when not done already
  64. " For version 5.8 and later: only when an item doesn't have highlighting yet
  65. if version >= 508 || !exists("did_cweb_syntax_inits")
  66.   if version < 508
  67.     let did_cweb_syntax_inits = 1
  68.     command -nargs=+ HiLink hi link <args>
  69.   else
  70.     command -nargs=+ HiLink hi def link <args>
  71.   endif
  72.  
  73.   HiLink webRestrictedTeX String
  74.  
  75.   delcommand HiLink
  76. endif
  77.  
  78. let b:current_syntax = "cweb"
  79.  
  80. " vim: ts=8
  81.